# 导入所需的库和模块
import csv
import os

import pandas as pd
import seaborn as sns
from matplotlib import pyplot as plt
from snownlp import SnowNLP


# 定义情感分析函数emotion()
def emotion():
    # 设置中文字体
    plt.rcParams['font.family'] = 'SimHei'  # 使用中文字体“黑体”

    # 使用pandas库读取评论数据并存储到列表中
    comment = pd.read_csv('comment.csv', encoding='utf-8-sig')
    items = comment['Comment'].astype(str).tolist()[0:]
    product = comment['itemName'].astype(str).tolist()[0:]
    commentTime = comment['commentTime'].astype(str).tolist()[0:]
    itemId = comment['itemId'].astype(str).tolist()[0:]
    itemPage = comment['itemPage'].astype(str).tolist()[0:]

    # 定义一个空列表D用于存储情感分析结果
    D = []
    # 使用SnowNLP库对每条评论进行情感分析，判断情感倾向，并将结果存储到列表D中
    for i in range(len(items)):
        s = SnowNLP(items[i])
        t = s.sentiments
        #    print(t)
        if t >= 0.6:
            sentiment = "正面"
        elif t <= 0.4:
            sentiment = "负面"
        else:
            sentiment = "中性"
        a = [itemId[i], itemPage[i], product[i], commentTime[i], items[i], t, sentiment]
        D.append(a)
    # print(D)
    # 将情感分析结果保存到CSV文件中
    with open('./情感词分析.csv', 'w', newline='',  encoding='utf-8-sig') as f1:
        write = csv.writer(f1)
        write.writerow(['itemId', 'itemPage', 'itemName', 'commentTime', 'Comment', 'Sentiment_score', 'Sentiment'])
        write.writerows(D)

    # 使用pandas库读取保存的情感分析结果
    data = pd.read_csv('./情感词分析.csv', encoding='utf-8-sig')
    # 根据商品名称进行分组并计算情感得分平均值
    ProductsID = data['itemId'].unique()
    product_sentiment_scores = data.groupby('itemName')['Sentiment_score'].sum()
    # 生成柱状图展示不同商品的情感得分
    plt.figure(figsize=(12, 6))
    sns.barplot(x=ProductsID, y=product_sentiment_scores.values / len(ProductsID))
    plt.title('Sentiment_Score by Products')
    plt.xlabel('Products')
    plt.ylabel('Sentiment_score')
    plt.xticks(rotation=0, fontsize=8)
    plt.tight_layout()
    # 保存柱状图为图片
    plt.savefig('sentiment_analysis.png')  # 保存为PNG格式
    # 获取保存的图片的相对路径
    image_path = os.path.join(os.getcwd(), 'sentiment_analysis.png')
    return image_path


emotion()
